package com.bsj.power.system.config.timer;

import com.bsj.power.system.service.AiAlarmService;
import com.bsj.power.system.service.OpenApiService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * @author yinhao
 * @version 1.0
 * @description 定时任务管理器
 * @date 2024/7/15
 */
@Component
@Slf4j
public class ScheduledTask {

    @Autowired
    private OpenApiService openApiService;

    @Autowired
    private AiAlarmService aiAlarmService;

    @Value("${scheduledTasks.isExecute}")
    private boolean isExecute;

    /**
     * 登录人员信息同步定时任务,每天凌晨两点半执行
     */
    @Async
//    @Scheduled(cron = "0 0 */2 * * ?")
    @Scheduled(cron = "0 30 2 * * ?")
    public void loginPerson() {
        openApiService.syncHrmUserInfo();
    }

//    /**
//     * 工单信息定时同步任务,1小时执行一次
//     */
//    @Async
//    @Scheduled(cron = "0 0 */1 * * ?")
//    public void workInfo() {
//        openApiService.syncSysWorkList();
//    }

    /**
     * 修改工单信息定时同步任务,1小时执行一次
     */
    @Async
    @Scheduled(cron = "0 0 */1 * * ?")
    public void updateWorkInfo() {
        openApiService.syncUpdateSysWorkList();
    }

    /**
     * 基站、标签设备信息定时同步任务,15分钟执行一次
     */
    @Async
    @Scheduled(cron = "0 0/15 * * * ?")
    public void deviceInfo() {
        openApiService.syncDeviceInfo();
    }

    /**
     * 基站设备状态定时同步任务,每天23:50点执行
     */
    @Async
    @Scheduled(cron = "0 50 23 * * ?")
    public void deviceStatusInfo() {
        if (isExecute) {
            openApiService.syncDeviceStatusInfo();
        }
    }

    /**
     * 异常工单检查
     */
//    @Async
//    @Scheduled(cron = "0 0 4 * * ?")
//    public void anomalousJob() {
//        String time = DateUtils.dateToStr(TIME_STANDARD_FORMAT_YMDHM, new Date());
//        aiAlarmService.anomalousJob(time);
//        log.info("工单异常检查MinuteTime： {}", time);
//    }
}
